/**
 * 
 */
package fr.toussna.entity;

import java.util.List;

/**
 * <b> Classe représentant un article, Elle hérite de la classe 
 * @see DomainEntity </b>
 * <p>
 * Chaque article a une catégorie, un propriétaire et une date de publication:
 * ces champs sont obligatoires.
 * </p>
 * <p>
 * L'article peut avoir une photo associée.
 * </p>
 * <p>
 * Content représente l'article lui même ou son contenu, il peut avoir n'importe
 * quelle taille
 * </p>
 * 
 * @author My
 * @version 2.0
 * 
 */
public class Article extends DomainEntity{

	// **********************************
	// * Attributs *
	// **********************************

	/**
	 * 
	 */
	private static final long serialVersionUID = 8985894859849L;

	/**
	 * La date de publication de l'article. <br/>
	 * La date est en format UTC: yyyy-MM-dd'T'HH:mm:ss
	 * 
	 * @see Article#setDate(String)
	 */
	private String date;

	/**
	 * La catégorie de l'article
	 * 
	 * @see Article#setCategory(Category)
	 */
	private Category category;

	/**
	 * Le membre possedant l'article
	 * 
	 * @see Article#setMember(Member)
	 */
	private Member member;

	/**
	 * L'auteur de l'article. <br/>
	 * le nom qui s'affichera sur l'article.
	 * 
	 * @see Article#setAutor(String)
	 */
	private String autor;

	/**
	 * Le titre de l'article
	 * 
	 * @see Article#setTitle(String)
	 */
	private String title;

	/**
	 * La photo accompagnat l'aticle
	 * 
	 * @see Article#setPhoto(Object)
	 */
	private Object photo;

	/**
	 * Le contenu de l'article
	 * 
	 * @see Article#setContent(String)
	 */
	private String content;
	
	/**
	 * Liste des commentaires rattachés a cette article
	 * @see Article#setComments(List)
	 * 
	 */
	private List<Comment> comments;
	// **********************************
	// * Constructeurs *
	// **********************************
	
	/**
	 * Article avec les champs obligatoire
	 * On teste si le champ auteur n'est pas fourni, on prend par default le nom du membre comme auteur
	 */
	public Article(String _date, Category _category, Member _member, String _title,String _content ){
		this.date = _date;
		this.category = _category;
		this.member = _member;
		this.title = _title;
		this.content = _content;
		if(this.autor == null){
			this.autor = _member.getName();
		}
	}
	
	public Article(String _date, Category _category, Member _member , String _autor, String _title,String _content ){
		this.date = _date;
		this.category = _category;
		this.autor = _autor;
		this.member = _member;
		this.title = _title;
		this.content = _content;
		
	}
	
	public Article(String _date, Category _category, Member _member, String _autor, String _title, Object _photo, String _content ){
		this.date = _date;
		this.category = _category;
		this.member = _member;
		this.autor = _autor;
		this.title = _title;
		this.photo = _photo;
		this.content = _content;
	}
	
	/**
     * @param long1
     */
    public Article(long long1) {
	   super(long1);
    }
    
	public Article(){
		
	}

	// **********************************
	// * Methodes *
	// **********************************

	

	/**
	 * Cette méthode envoi tous les attributs d'article dans une chaine de
	 * caractère.
	 * @return L'article en littéral.
	 */
	public String toString() {
		StringBuffer bf = new StringBuffer();
		bf.append("Article Informations \n");
		bf.append("  Publish date: " + this.getDate() + "\n");
		bf.append("  Category : " + this.getCategory().getName() + "\n");
		bf.append("  Member : " + this.getMember().getName()+" "+this.getMember().getFirstName() + "\n");
		bf.append("  Autor: " + this.getAutor() + "\n");
		bf.append("  Title: " + this.getTitle() + "\n");
		bf.append("  Body: " + this.getContent());
		return bf.toString();
	}

	// **********************************
	// * Getters & Setters *
	// **********************************

	/**
	 * @return les commentaires
	 */
	public List<Comment> getComments() {
		return comments;
	}

	/**
	 * @param comments 
	 * 					la liste des commenatires a setter
	 */
	public void setComments(List<Comment> comments) {
		this.comments = comments;
	}

	/**
	 * @return la date
	 */
	public String getDate() {
		return date;
	}

	/**
	 * @param date
	 *            la date a setter
	 */
	public void setDate(String date) {
		this.date = date;
	}

	/**
	 * @return la categorie
	 */
	public Category getCategory() {
		return category;
	}

	/**
	 * @param category
	 *            la categorie a setter
	 */
	public void setCategory(Category category) {
		this.category = category;
	}

	/**
	 * @return le member
	 */
	public Member getMember() {
		return member;
	}

	/**
	 * @param member
	 *            le member a setter
	 */
	public void setMember(Member member) {
		this.member = member;
	}

	/**
	 * @return l'auteur
	 */
	public String getAutor() {
		return autor;
	}

	/**
	 * @param autor
	 *            l'auteur a setter
	 */
	public void setAutor(String autor) {
		this.autor = autor;
	}

	/**
	 * @return le title
	 */
	public String getTitle() {
		return title;
	}

	/**
	 * @param title
	 *            le titre a setter
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * @return la photo
	 */
	public Object getPhoto() {
		return photo;
	}

	/**
	 * @param photo
	 *            la photo a setter
	 */
	public void setPhoto(Object photo) {
		this.photo = photo;
	}

	/**
	 * @return le contenu
	 */
	public String getContent() {
		return content;
	}

	/**
	 * @param content
	 *            le contenu a setter
	 */
	public void setContent(String content) {
		this.content = content;
	}

}
